package db

import (
	"blog_api/conf"
	"fmt"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
	"time"
)

/*
 公共db模型
*/
var Mysql *gorm.DB

/*
 * 自动调用init函数，只会被调用一次
 */
func init() {
	// dsn格式语法：root:123456@tcp(localhost:3306)/tizi365?charset=utf8&parseTime=True&loc=Local
	// 这里使用Sprintf动态拼接dsn参数，因为一般数据库连接参数，我们都是保存在配置文件里面，需要从配置文件加载参数，然后拼接dsn。
	dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&parseTime=True&loc=Local&timeout=%s",
		conf.DB_USER,
		conf.DB_PASSWORD,
		conf.DB_HOST,
		conf.DB_PORT,
		conf.DB_DATABASE,
		conf.DB_TIMEOUT)
	var err error
	// 连接MYSQL, 获得DB类型实例，用于后面的数据库读写操作。
	Mysql, err = gorm.Open(mysql.Open(dsn), &gorm.Config{})
	if err != nil {
		panic("connect database faild, error：" + err.Error())
	}
	// 获取通用数据库对象 sql.DB ，然后使用其提供的功能
	sqlDB, err := Mysql.DB()
	// SetMaxIdleConns 用于设置连接池中空闲连接的最大数量。
	sqlDB.SetMaxIdleConns(10)
	// SetMaxOpenConns 设置打开数据库连接的最大数量。
	sqlDB.SetMaxOpenConns(100)
	// SetConnMaxLifetime 设置了连接可复用的最大时间。
	sqlDB.SetConnMaxLifetime(time.Hour)
}
